home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmigaPlus / Tools / Development / RxMUI / Examples / TAClock.rexx < prev    next >
Encoding:
OS/2 REXX Batch file  |  2004-01-31  |  14.0 KB  |  483 lines

  1. /**/
  2.  
  3. signal on halt
  4. signal on break_c
  5.  
  6. call Init
  7. call InitTable
  8. call CreateApp
  9. call HandleApp
  10. /* never reached */
  11. /***********************************************************************/
  12. Init: procedure expose globals.
  13.     l="rmh.library";if ~show("L",l) then;if ~addlib(l,0,-30) then exit
  14.     l="rexxmathlib.library";if ~show("L",l) then;if ~addlib(l,0,-30) then exit
  15.     if AddLibrary("rxmui.library")~=0 then exit
  16.  
  17.     globals.last.m=-1
  18.     globals.last.s=-1
  19.     call setconfig("D",0)
  20.  
  21.     return
  22. /***********************************************************************/
  23. CreateApp: procedure expose globals.
  24.  
  25.     app.Title="Clock"
  26.     app.Version="$VER: Clock 1.0 (11.6.2003)"
  27.     app.Copyright="©2003 by alfie"
  28.     app.Author="alfie"
  29.     app.Description="Clock: a tablet example"
  30.     app.Base="RXMUIEXAMPLE"
  31.  
  32.     app.menustrip="strip"
  33.      strip.class="Menustrip"
  34.      strip.0="mproject"
  35.       mproject.Title="Project"
  36.       mproject.class="menu"
  37.        mproject.0=menuitem("mabout","?\About...")
  38.        mproject.1=menuitem("maboutrxmui","X\About RxMUI...")
  39.        mproject.2=menuitem("maboutmui","!\About MUI...")
  40.        mproject.3=menuitem("","BAR")
  41.        mproject.4=menuitem("mhide","H\Hide")
  42.        mproject.5=menuitem("","BAR")
  43.        mproject.6=menuitem("mquit","Q\Quit")
  44.      strip.1="meditor"
  45.       meditor.Title="Editor"
  46.       meditor.class="menu"
  47.        meditor.0=menuitem("mconfig","C\Configure...")
  48.        meditor.1=menuitem("","BAR")
  49.        meditor.2=menuitem("mmui","M\MUI settings...")
  50.  
  51.     app.SubWindow="win"
  52.      win.ID="MWIN"
  53.      win.nosize=0
  54.      win.Contents="mgroup"
  55.      win.Title="Clock"
  56.  
  57.       mgroup.0="tb"
  58.        tb.class="Tablet"
  59.        tb.Frame="String"
  60.        tb.Font="BIG"
  61.        tb.InnerLeft=0
  62.        tb.InnerTop=0
  63.        tb.InnerRight=0
  64.        tb.InnerBottom=0
  65.  
  66.     app.SubWindow.1="pwin"
  67.      pwin.ID="PWIN"
  68.      pwin.ObjectID="PWIN"
  69.      pwin.Title="Config"
  70.      pwin.Contents="pmgroup"
  71.  
  72.       pmgroup.0="pg"
  73.        pg.class="group"
  74.        pg.frame="group"
  75.        pg.background="groupback"
  76.        pg.columns=6
  77.         pg.0=label("_Back","free")
  78.         pg.1="backgroundpen"
  79.          backgroundpen.class="Poppen"
  80.          backgroundpen.pptitle="Background pen"
  81.          backgroundpen.ppspec=globals.backgroundpen.spec
  82.          backgroundpen.ControlChar="b"
  83.         pg.2=label("_Hours","free")
  84.         pg.3="hourspen"
  85.          hourspen.class="Poppen"
  86.          hourspen.pptitle="Hours pen"
  87.          hourspen.ppspec=globals.hourspen.spec
  88.          hourspen.ControlChar="h"
  89.         pg.4=label("_Minutes","free")
  90.         pg.5="minutespen"
  91.          minutespen.class="Poppen"
  92.          minutespen.pptitle="Minutes pen"
  93.          minutespen.ppspec=globals.minutespen.spec
  94.          minutespen.ControlChar="m"
  95.         pg.6=label("H_our","free")
  96.         pg.7="hourpen"
  97.          hourpen.class="Poppen"
  98.          hourpen.pptitle="Hours pen"
  99.          hourpen.ppspec=globals.hourpen.spec
  100.          hourpen.ControlChar="o"
  101.         pg.8=label("M_inute","free")
  102.         pg.9="minutepen"
  103.          minutepen.class="Poppen"
  104.          minutepen.pptitle="Minute pen"
  105.          minutepen.ppspec=globals.minutepen.spec
  106.          minutepen.ControlChar="i"
  107.         pg.10=label("_Second","free")
  108.         pg.11="secondpen"
  109.          secondpen.class="Poppen"
  110.          secondpen.pptitle="Second pen"
  111.          secondpen.ppspec=globals.secondpen.spec
  112.          secondpen.ControlChar="s"
  113.       pmgroup.1="sg"
  114.        sg.class="hgroup"
  115.        sg.frame="group"
  116.        sg.background="groupback"
  117.         sg.0=hspace()
  118.         sg.1=label("_Show hours")
  119.         sg.2=checkmark("showhours",,'s')
  120.         sg.3=hspace()
  121.         sg.4=label("Show minu_tes")
  122.         sg.5=checkmark("showminutes",,'t')
  123.         sg.6=hspace()
  124.       pmgroup.2="bg"
  125.        bg.class="hgroup"
  126.         bg.0=button("defaultpens","_Defaults")
  127.         bg.1=hspace()
  128.         bg.2=button("alfiepens","_Alfie's")
  129.         bg.3=hspace()
  130.         bg.4=button("usepens","_Use")
  131.  
  132.     if NewObj("application","APP")>0 then exit
  133.  
  134.     call Notify("mabout","menutrigger","Everytime","app","about","win")
  135.     call Notify("maboutrxmui","menutrigger","everytime","app","aboutrxmui","win")
  136.     call Notify("maboutmui","menutrigger","everytime","app","aboutmui","win")
  137.     call Notify("mhide","menutrigger","everytime","app","set","iconified",1)
  138.     call Notify("mquit","menutrigger","everytime","app","returnid","quit")
  139.     call Notify("mconfig","menutrigger","everytime","pwin","set","open",1)
  140.     call Notify("mmui","menutrigger","everytime","app","openconfigwindow")
  141.  
  142.     call Notify("win","CloseRequest",1,"app","ReturnID","quit")
  143.     call Notify("win","open","everytime","app","return","call startstop(h.open)","triggerattr")
  144.     call Notify("tb","tbredraw","everytime","app","return","call drawclock")
  145.  
  146.     call Notify("pwin","CloseRequest",1,"pwin","set","open",0)
  147.     call Notify("defaultpens","pressed",0,"app","return","call setconfig('D',1)")
  148.     call Notify("alfiepens","pressed",0,"app","return","call setconfig('A',1)")
  149.     call Notify("usepens","pressed",0,"app","return","call newconfig(1)")
  150.  
  151.     call set("win","open",1)
  152.  
  153.     return
  154. /***********************************************************************/
  155. HandleApp: procedure expose globals.
  156.     globals.tim=CreateTimer()
  157.     ts=timersignal(globals.tim)
  158.     ctrl_c=2**12
  159.     sigs=or(ts,ctrl_c)
  160.     call starttimer(globals.tim,0,800000)
  161.     do forever
  162.         call NewHandle("app","h",sigs)
  163.         if and(h.signals,ctrl_c)>0 then signal break_c
  164.         if and(h.signals,ts)>0 then do
  165.             call drawtime
  166.             call starttimer(globals.tim,0,800000)
  167.         end
  168.         if h.eventflag then
  169.             select
  170.                 when h.event="QUIT" then signal break_c
  171.                 otherwise interpret h.event
  172.             end
  173.     end
  174.     /* never reached */
  175. /***********************************************************************/
  176. inittable: procedure expose globals.
  177.  
  178.     delta=0.104471975512
  179.     r=0
  180.  
  181.     do i=0 for 15
  182.  
  183.         c=cos(r)
  184.         s=sin(r)
  185.  
  186.         globals.i.x=c
  187.         globals.i.y=s
  188.  
  189.         r=r+delta
  190.     end
  191.  
  192.     return
  193. /**************************************************************************/
  194. drawclock: procedure expose globals.
  195.     call set("app","sleep",1)
  196.  
  197.     globals.width=xget("tb","tbwidth")
  198.     globals.height=xget("tb","tbheight")
  199.  
  200.     if globals.width>globals.height then r=globals.height
  201.     else r=globals.width
  202.  
  203.     r=trunc(r/2)-8
  204.  
  205.     globals.hc=trunc(globals.width/2)
  206.     globals.vc=trunc(globals.height/2)
  207.  
  208.     globals.hr=r-20
  209.     globals.mr=r-14
  210.     globals.sr=r-10
  211.  
  212.     globals.last.hx=globals.hc
  213.     globals.last.hy=globals.vc
  214.  
  215.     globals.last.mx=globals.hc
  216.     globals.last.my=globals.vc
  217.  
  218.     globals.last.sx=globals.hc
  219.     globals.last.sy=globals.vc
  220.  
  221.     call set("tb","tbapen",globals.backgroundpen.pen)
  222.     call DoMethod("tb","tbrectfill",0,0,globals.width-1,globals.height-1)
  223.  
  224.     if (globals.showhours | globals.showminutes) & globals.width>80 & globals.height>80 then do
  225.         do i=0 for 60
  226.             call getcoord(i,"F")
  227.  
  228.             fx=trunc(globals.free.sx*(r+1))+globals.hc
  229.             fy=trunc(globals.free.sy*(r+1))+globals.vc
  230.  
  231.             if i//5=0 then do
  232.                 j=i%5
  233.                 hours.j.hfx=fx
  234.                 hours.j.hfy=fy
  235.                 hours.j.htx=trunc(globals.free.sx*(r-8))+globals.hc
  236.                 hours.j.hty=trunc(globals.free.sy*(r-8))+globals.vc
  237.  
  238.             end
  239.             else do
  240.                 if globals.showminutes then do
  241.                     tx=trunc(globals.free.sx*(r-2))+globals.hc
  242.                     ty=trunc(globals.free.sy*(r-2))+globals.vc
  243.                     call DoMethod("tb","tbareadraw",fx,fy,tx,ty)
  244.                 end
  245.             end
  246.         end
  247.  
  248.         if globals.showminutes then do
  249.             call set("tb","tbapen",globals.minutespen.pen)
  250.             call DoMethod("tb","tbareaend")
  251.         end
  252.  
  253.         if globals.showhours then do
  254.             do i=0 for 12
  255.                 call DoMethod("tb","tbareadraw",hours.i.hfx,hours.i.hfy,hours.i.htx,hours.i.hty)
  256.             end
  257.  
  258.             call set("tb","tbapen",globals.hourspen.pen)
  259.             call DoMethod("tb","tbareaend")
  260.         end
  261.     end
  262.  
  263.     call drawtime
  264.  
  265.     call set("app","sleep",0)
  266.  
  267.     return
  268. /**************************************************************************/
  269. getcoord: procedure expose globals.
  270. parse arg val,what,min
  271.  
  272.     if what="H" then do
  273.         val=val//12
  274.         k=(val*5)//15
  275.         if min>=12 then k=k+1
  276.         if min>=24 then k=k+1
  277.         if min>=36 then k=k+1
  278.         if min>=48 then k=k+1
  279.     end
  280.     else k=val//15
  281.  
  282.     x=globals.k.x
  283.     y=globals.k.y
  284.  
  285.     if (what="H" & val>=9) | (val>=45) then do
  286.         cx=-x
  287.         cy=-y
  288.     end
  289.     else
  290.         if (what="H" & val>=6) | (val>=30) then do
  291.             cx=-y
  292.             cy=x
  293.         end
  294.         else
  295.             if (what="H" & val>=3) | (val>=15) then do
  296.                 cx=x
  297.                 cy=y
  298.             end
  299.             else do
  300.                 cx=y
  301.                 cy=-x
  302.             end
  303.  
  304.     select
  305.         when what="H" then do
  306.             nhx=trunc(globals.hr*cx)+globals.hc
  307.             nhy=trunc(globals.hr*cy)+globals.vc
  308.             if nhx~=globals.last.hx | nhy~=globals.last.hy then do
  309.                 call domethod("tb","tbdraw",globals.hc,globals.vc,globals.last.hx,globals.last.hy)
  310.             end
  311.  
  312.             globals.last.hx=nhx
  313.             globals.last.hy=nhy
  314.         end
  315.  
  316.         when what="M" then do
  317.             globals.last.mx=trunc(globals.mr*cx)+globals.hc
  318.             globals.last.my=trunc(globals.mr*cy)+globals.vc
  319.         end
  320.  
  321.         when what="S" then do
  322.             globals.last.sx=trunc(globals.sr*cx)+globals.hc
  323.             globals.last.sy=trunc(globals.sr*cy)+globals.vc
  324.         end
  325.  
  326.         when what="F" then do
  327.             globals.free.sx=cx
  328.             globals.free.sy=cy
  329.         end
  330.     end
  331.  
  332.     return
  333. /**************************************************************************/
  334. drawtime: procedure expose globals.
  335.  
  336.     parse value(time()) with h":"m":"s
  337.     h=h+0; m=m+0; s=s+0
  338.  
  339.     call set("tb","tbapen",globals.backgroundpen.pen)
  340.     call clear(h,m,s)
  341.  
  342.     call getcoord(h,"H",m)
  343.     call getcoord(m,"M")
  344.     call getcoord(s,"S")
  345.  
  346.     call set("tb","tbapen",globals.hourpen.pen)
  347.     call domethod("tb","tbdraw",globals.hc,globals.vc,globals.last.hx,globals.last.hy)
  348.  
  349.     call set("tb","tbapen",globals.minutepen.pen)
  350.     call domethod("tb","tbdraw",globals.hc,globals.vc,globals.last.mx,globals.last.my)
  351.  
  352.     call set("tb","tbapen",globals.secondpen.pen)
  353.     call domethod("tb","tbdraw",globals.hc,globals.vc,globals.last.sx,globals.last.sy)
  354.  
  355.     msg="ASoft"
  356.     call DoMethod("tb","TBTextSize",msg,"size")
  357.     amx=(globals.width-size.width)%2
  358.     amy=(globals.height-size.height-size.MinY)%2
  359.     call set("tb","tbapen",globals.hourspen.pen)
  360.     call DoMethod("tb","TBText",amx,amy,msg)
  361.  
  362.     return
  363. /**************************************************************************/
  364. clear: procedure expose globals.
  365. parse arg ah,am,as
  366.  
  367.     if as~=globals.last.s then do
  368.         globals.last.s=as
  369.         call domethod("tb","tbdraw",globals.hc,globals.vc,globals.last.sx,globals.last.sy)
  370.     end
  371.  
  372.     if am~=globals.last.m then do
  373.         globals.last.m=am
  374.         call domethod("tb","tbdraw",globals.hc,globals.vc,globals.last.mx,globals.last.my)
  375.     end
  376.  
  377.     return
  378. /**************************************************************************/
  379. newpen: procedure expose globals.
  380. parse arg what,redraw
  381.     select
  382.         when what="B"  then o="BACKGROUNDPEN"
  383.         when what="HS" then o="HOURSPEN"
  384.         when what="MS" then o="MINUTESPEN"
  385.         when what="H"  then o="HOURPEN"
  386.         when what="M"  then o="MINUTEPEN"
  387.         when what="S"  then o="SECONDPEN"
  388.     end
  389.  
  390.     s=xget(o,"PPSpec")
  391.  
  392.     call domethod("tb","TBAllocPen",s,"A")
  393.     if rc then do
  394.         if redraw then call domethod("tb","TBReleasePen",globals.o.pen)
  395.         globals.o.spec=s
  396.         globals.o.pen=A
  397.  
  398.         if redraw then call drawclock
  399.  
  400.     end
  401.  
  402.     return
  403. /**************************************************************************/
  404. newconfig: procedure expose globals.
  405. parse arg redraw
  406.  
  407.     call set("app","sleep",1)
  408.     call newpen("B",0)
  409.     call newpen("HS",0)
  410.     call newpen("MS",0)
  411.     call newpen("H",0)
  412.     call newpen("M",0)
  413.     call newpen("S",0)
  414.  
  415.     globals.showhours=xget("showhours","selected")
  416.     globals.showminutes=xget("showminutes","selected")
  417.  
  418.     call set("app","sleep",0)
  419.     if redraw then call drawclock
  420.  
  421.     return
  422. /**************************************************************************/
  423. setconfig: procedure expose globals.
  424. parse arg what,put
  425.  
  426.     select
  427.         when what="D" then do
  428.             globals.backgroundpen.spec="m1"
  429.             globals.hourspen.spec="m5"
  430.             globals.minutespen.spec="m5"
  431.             globals.hourpen.spec="m5"
  432.             globals.minutepen.spec="m6"
  433.             globals.secondpen.spec="m0"
  434.  
  435.             globals.showhours=0
  436.             globals.showminutes=0
  437.         end
  438.  
  439.         when what="A" then do
  440.             globals.backgroundpen.spec="m5"
  441.             globals.hourspen.spec="m1"
  442.             globals.minutespen.spec="m1"
  443.             globals.hourpen.spec="m0"
  444.             globals.minutepen.spec="m6"
  445.             globals.secondpen.spec="m7"
  446.  
  447.             globals.showhours=1
  448.             globals.showminutes=0
  449.         end
  450.     end
  451.  
  452.     if put then do
  453.         call set("backgroundpen","PPSpec",globals.backgroundpen.spec)
  454.         call set("hourspen","PPSpec",globals.hourspen.spec)
  455.         call set("minutespen","PPSpec",globals.hourspen.spec)
  456.         call set("hourpen","PPSpec",globals.hourpen.spec)
  457.         call set("minutepen","PPSpec",globals.minutepen.spec)
  458.         call set("secondpen","PPSpec",globals.secondpen.spec)
  459.  
  460.         call set("showhours","Selected",globals.showhours)
  461.         call set("showminutes","Selected",globals.showminutes)
  462.     end
  463.  
  464.     return
  465. /**************************************************************************/
  466. startstop: procedure expose globals.
  467. parse arg start
  468.     if start then do
  469.         call newconfig(0)
  470.         globals.go=1
  471.         call starttimer(globals.tim,0,800000)
  472.     end
  473.     else do
  474.         globals.go=0
  475.         call stoptimer(globals.tim)
  476.     end
  477.     return
  478. /**************************************************************************/
  479. halt:
  480. break_c:
  481.     exit
  482. /**************************************************************************/
  483.